_EXPAND

            
#include <malloc.h>    требуется только для объявления функции
            
char *_expand(ptr,size);
char *ptr;             указатель на ранее  захваченный блок памяти
unsigned size;         новый размер в байтах

Описание.
Функция _expand изменяет размер ранее захваченных блоков памяти, пытаясь расширить или сузить блок без передвижения его местоположения в heap.
Аргумент ptr указывает на начало блока. Аргумент size задает новый размер блока в байтах. Содержимое блоков не изменяется.
Аргумент ptr также указывает на освобождающийся блок до тех пор, пока не будут внешне вызваны calloc , _expand , halloc , malloc или realloc , либо пока блок будет свободен.
Если ptr указывает на освобожденный блок, то этот блок остается свободным и после вызова _expand.

Возвращаемое значение.
Функция _expand возвращает char -указатель на перезахваченный блок памяти. В отличии от realloc , _expand не может передвигать блок и изменять его размеры. Это означает, что аргумент ptr для _expand является тем же самым, что и возвращаемое значение, если памяти достаточно, чтобы расширить блок без его передвижения.
Возвращается значение NULL , если памяти недостаточно для расширения блока. В этом случае объект, на который указывает ptr , будет расширен настолько, насколько позволяет его расположение.
В памяти, на которую указывает возвращаемое значение, гарантировано выравнивание для хранения любого типа объекта.
Новый размер объекта может быть проверен функцией _msize.
Чтобы получить указатель, тип которого отличен от char , используется преобразователь типа возвращаемого значения.

Пример:

            
#include <stdio.h>
#include <malloc.h>
            
main()
{
               long *oldptr;
               unsigned int newsize=64000;
            
               oldptr=(long*)malloc(10000*sizeof(long));
               printf("Size of memory block pointed to by
                      oldptr=%u\n", _msize(oldptr));
            
               if (_expand(oldptr,newsize)!= NULL)
                 printf("expand was able to increase block
                        to %u\n", _msize(oldptr));
            
               else
                printf("expand was able to increase block to
                       only %u\n", _msize(oldptr));
}
Hosted by uCoz